package com.ssy.lingxi.settle.accounts.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.dto.request.MemberSettlementStrategyRequest;
import com.ssy.lingxi.dto.response.MemberSettlementStrategyResponse;
import com.ssy.lingxi.settle.accounts.model.vo.request.*;
import com.ssy.lingxi.settle.accounts.model.vo.response.MemberSettlementStrategyDetailVO;
import com.ssy.lingxi.settle.accounts.model.vo.response.MemberSettlementStrategyVO;

/**
 * 会员结算策略接口
 * @author 伍将
 * @date 2020/10/21
 * @version 2.0.0
 */
public interface IMemberSettlementStrategyService {

    /**
     * 分页查询会员结算策略
     * @author 伍将
     * @date 2020/10/21
     * @param sysUser:
     * @param pageVO:
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.common.response.PageData < com.ssy.lingxi.settle.accounts.mode.vo.response.MemberSettlementStrategyVO>>
     **/
    Wrapper<PageData<MemberSettlementStrategyVO>> pageStrategy(UserLoginCacheDTO sysUser, MemberSettlementStrategyPageVO pageVO);

    /**
     * 设置会员结算策略状态
     * @author 伍将
     * @date 2020/10/21
     * @param sysUser:
     * @param setStatusVO:
     * @return com.ssy.lingxi.common.response.Wrapper
     **/
    Wrapper<Void> setStatus(UserLoginCacheDTO sysUser, MemberSettlementStrategySetStatusVO setStatusVO);

    /**
     * 查询会员结算策略详情
     * @author 伍将
     * @date 2020/10/21
     * @param id:
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.settle.accounts.mode.vo.response.MemberSettlementStrategyDetailVO>
     **/
    Wrapper<MemberSettlementStrategyDetailVO> getDetail(Long id);

    /**
     * 新增会员结算策略
     * @author 伍将
     * @date 2020/10/21
     * @param addVO:
     * @return com.ssy.lingxi.common.response.Wrapper<java.lang.Long>
     **/
    Wrapper<Long> add(UserLoginCacheDTO sysUser, MemberSettlementStrategyAddVO addVO);

    /**
     * 更新会员结算策略
     * @author 伍将
     * @date 2020/10/21
     * @param updateVO:
     * @return com.ssy.lingxi.common.response.Wrapper<java.lang.Long>
     **/
    Wrapper<Long> update(UserLoginCacheDTO sysUser, MemberSettlementStrategyUpdateVO updateVO);

    /**
     * 获取物流结算方式
     * @param sysUser 登录用户
     * @return 物流结算方式
     */
    Wrapper<String> getLogisticsSettlementWay(UserLoginCacheDTO sysUser, SettlementWayGetVO getVO);

    /**
     * 删除会员结算策略
     * @author 伍将
     * @date 2020/12/24
     * @param sysUser 登录用户
     * @param deleteVO 删除测试
     **/
    Wrapper<Void> delete(UserLoginCacheDTO sysUser, MemberSettlementStrategyDeleteVO deleteVO);

    /**
     * 查询会员结算策略（有效）
     * @param memberSettlementStrategyRequest 会员结算策略请求
     * @return 会员结算策略（有效）
     */
    Wrapper<MemberSettlementStrategyResponse> getMemberSettlementStrategy(MemberSettlementStrategyRequest memberSettlementStrategyRequest);
}
